﻿using System;
using AntEater.ComponentModel;
using AntEater.ComponentModel.Configuration;
using AntEater.Runtime.Services;
using AntEater.Runtime.UI;

namespace AntEater.Runtime
{
    /// <summary>
    /// The AntEater runtime interface defines the interface for the
    /// communication between the the Visual Studio integration an
    /// the application.
    /// </summary>
    public interface IAntEaterRuntime
    {
        /// <summary>
        /// Gets the solution.
        /// </summary>
        /// <value>The solution.</value>
        Solution Solution {
            get;
        }

        /// <summary>
        /// Gets the options.
        /// </summary>
        /// <value>The options.</value>
        Options Options {
            get;
        }

        /// <summary>
        /// Gets the configuration.
        /// </summary>
        /// <value>The configuration.</value>
        AntEaterConfiguration Configuration {
            get;
        }

        /// <summary>
        /// Gets the output.
        /// </summary>
        /// <value>The output.</value>
        Output Output {
            get;
        }

        /// <summary>
        /// Gets the runtime services.
        /// </summary>
        /// <value>The runtime services.</value>
        RuntimeServiceProvider RuntimeServices {
            get;
        }

        /// <summary>
        /// Gets the view services.
        /// </summary>
        /// <value>The view services.</value>
        PresenterProvider Presenters {
            get;
        }
    }
}
